/*******************************************************************************
* Signavio Core Components
* Copyright (C) 2012 Signavio GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package de.hpi.bpmn2_0.factory.node;
import org.oryxeditor.server.diagram.generic.GenericShape;
import de.hpi.bpmn2_0.annotations.StencilId;
import de.hpi.bpmn2_0.exceptions.BpmnConverterException;
import de.hpi.bpmn2_0.factory.AbstractShapeFactory;
import de.hpi.bpmn2_0.model.BaseElement;
import de.hpi.bpmn2_0.model.data_object.DataInput;
import de.hpi.bpmn2_0.model.data_object.DataObject;
import de.hpi.bpmn2_0.model.data_object.DataOutput;
import de.hpi.bpmn2_0.model.data_object.DataState;
/**
* Factory for Data Objects
*
* @author Philipp Giese
* @author Sven Wagner-Boysen
*
*/
@StencilId({
"DataObject"
})
public class DataObjectFactory extends AbstractShapeFactory {
/* (non-Javadoc)
* @see de.hpi.bpmn2_0.factory.AbstractBpmnFactory#createProcessElement(org.oryxeditor.server.diagram.Shape)
*/
// @Override
protected BaseElement createProcessElement(GenericShape shape)
throws BpmnConverterException {
String prop = shape.getProperty("input_output");
BaseElement dataObject = null;
if(prop == null || prop.equals("None")) {
dataObject = new DataObject();
this.setDataObjectAttributes((DataObject) dataObject, shape);
} else if(prop.equals("Input")) {
dataObject = new DataInput();
((DataInput) dataObject).setName(shape.getProperty("name"));
} else if(prop.equals("Output")) {
dataObject = new DataOutput();
((DataOutput) dataObject).setName(shape.getProperty("name"));
}
if(dataObject == null)
throw new BpmnConverterException("Error while creating DataObject: null value");
this.setCommonAttributes(dataObject, shape);
dataObject.setId(shape.getResourceId());
return dataObject;
}
/**
* This methods set the common properties of a data object based on its shape
* data.
*
* @param dataObject
* @param shape
*/
private void setDataObjectAttributes(DataObject dataObject, GenericShape shape) {
dataObject.setName(shape.getProperty("name"));
/* Set isCollection attribute */
String isCollection = shape.getProperty("iscollection");
if(isCollection != null && isCollection.equalsIgnoreCase("true"))
dataObject.setIsCollection(true);
else
dataObject.setIsCollection(false);
/* Define DataState element */
String dataStateName = shape.getProperty("state");
if(dataStateName != null && !(dataStateName.length() == 0)) {
DataState dataState = new DataState(dataStateName);
dataObject.setDataState(dataState);
}
// /* Determine requirements of data input and output */
// this.setRequiredForStartCompletionAttributes(dataObject, shape);
}
/**
* Checks for the required for start and completion attributes to determine
* whether a data object is necessary to start or complete an activity.
*
* A further post process step is needed to setup the IOSpecifications of the
* related activity.
*
* @param dataObject
* @param shape
*/
// private void setRequiredForStartCompletionAttributes(DataObject dataObject, GenericShape shape) {
//
// /* Handle required for start property */
//// String reqStartString = shape.getProperty("requiredforstart");
//// if(reqStartString != null && reqStartString.equalsIgnoreCase("true"))
//// dataObject.setIsRequiredForStart(true);
//// else
//// dataObject.setIsRequiredForStart(false);
////
//// /* Handle required for completion */
//// String reqCompletionString = shape.getProperty("producedatcompletion");
//// if(reqCompletionString != null && reqCompletionString.equalsIgnoreCase("true"))
//// dataObject.setIsCollection(true);
//// else
//// dataObject.setIsRequiredForCompletion(false);
// }
}